package com.itheima.intercepor;

import com.alibaba.fastjson.JSON;
import com.itheima.entity.Employee;
import com.itheima.exception.tokenException;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Log4j2
@Component
public class Intercepor implements HandlerInterceptor {

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取之前传给浏览器的token，返回给网页的token会储存在Header里面
        //这里之前，登录时传给前端的信息，格式必须和需求文档一致，才能接收成功
        //格式要一样，只有token有值就行，其他放空也没事，因为用的到的只有token，用来认证
        String token = request.getHeader("AuthorizationUser");

        //去数据库获取token的值
        Object o = redisTemplate.opsForValue().get(token);

        //判断是否存在token，有token就放行，同时在登出进行删除仓库token操作，验证不存在即可
        if (o == null){
            throw new tokenException();
        }

        //因为直接使用判断token是否存在，所以只要有redis里的token就能访问，这里还需要优化判断？或许不需要优化
        // //用糊涂工具的token验证器
        // boolean verify = JWTUtil.verify(token, "##@$%@#S#WS".getBytes());

        //创建token时就存入了对象的值
        Employee employee = JSON.parseObject(o.toString(), Employee.class);
        log.info("当前访问的用户是:" + employee.getName());

        return true;
    }
}
